package com.wswy.wzcx.model.car

import android.os.Parcel
import android.os.Parcelable
import com.google.gson.annotations.SerializedName

data class CarExtendInfo(@SerializedName("insurance") val insuranceInfo:InsuranceInfo?=null,
                         @SerializedName("inspection") val inspection:Inspection?=null,
                         @SerializedName("valuation") val valuation:Valuation?=null,
                         @SerializedName("carModel") var carTypeData:CarTypeData?=null):Parcelable{
    constructor(parcel: Parcel) : this(
            parcel.readParcelable(InsuranceInfo::class.java.classLoader),
            parcel.readParcelable(Inspection::class.java.classLoader),
            parcel.readParcelable(Valuation::class.java.classLoader),
            parcel.readParcelable(CarTypeData::class.java.classLoader)) {
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeParcelable(insuranceInfo, flags)
        parcel.writeParcelable(inspection, flags)
        parcel.writeParcelable(valuation, flags)
        parcel.writeParcelable(carTypeData, flags)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<CarExtendInfo> {
        override fun createFromParcel(parcel: Parcel): CarExtendInfo {
            return CarExtendInfo(parcel)
        }

        override fun newArray(size: Int): Array<CarExtendInfo?> {
            return arrayOfNulls(size)
        }
    }


}

/**
 * 保险
 */
data class InsuranceInfo(
        @SerializedName("date") val date: String?,
        @SerializedName("company") val company: String?,
        @SerializedName("remainDay") val remainDay: Int = 0,
        @SerializedName("status") val status: Int = 0,
        @SerializedName("desc") val desc: String? = null,
        @SerializedName("link") val link:String?=null):Parcelable {
    constructor(parcel: Parcel) : this(
            parcel.readString(),
            parcel.readString(),
            parcel.readInt(),
            parcel.readInt(),
            parcel.readString(),
            parcel.readString()) {
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(date)
        parcel.writeString(company)
        parcel.writeInt(remainDay)
        parcel.writeInt(status)
        parcel.writeString(desc)
        parcel.writeString(link)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<InsuranceInfo> {
        override fun createFromParcel(parcel: Parcel): InsuranceInfo {
            return InsuranceInfo(parcel)
        }

        override fun newArray(size: Int): Array<InsuranceInfo?> {
            return arrayOfNulls(size)
        }
    }

}

/**
 * 年检
 */
data class Inspection(@SerializedName("registerLicenseDate") val regDate: String?,
                      @SerializedName("licenseValidityDate") val validityDate: String?,
                      @SerializedName("remainDay") val remainDay: Int = 0,
                      @SerializedName("status") val status: Int = 0,
                      @SerializedName("desc") val desc: String? = null,
                      @SerializedName("link") val link:String?=null):Parcelable{
    constructor(parcel: Parcel) : this(
            parcel.readString(),
            parcel.readString(),
            parcel.readInt(),
            parcel.readInt(),
            parcel.readString(),
            parcel.readString()) {
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(regDate)
        parcel.writeString(validityDate)
        parcel.writeInt(remainDay)
        parcel.writeInt(status)
        parcel.writeString(desc)
        parcel.writeString(link)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<Inspection> {
        override fun createFromParcel(parcel: Parcel): Inspection {
            return Inspection(parcel)
        }

        override fun newArray(size: Int): Array<Inspection?> {
            return arrayOfNulls(size)
        }
    }

}

/**
 * 估值
 */
data class Valuation(@SerializedName("drivenDistance") val drivenDistance:String?=null,
                     @SerializedName("value") val value:String?=null,
                     @SerializedName("registerLicenseDate") val registerLicenseDate:String?=null,
                     @SerializedName("registerLicenseCity")val  registerLicenseCity:String?=null,
                     @SerializedName("registerLicenseCityId")val registerLicenseCityId:String?=null,
                     @SerializedName("lastValuationDate") val lastValuationDate:Long=0,
                     @SerializedName("info") val info:ValuationInfo?=null
                     ):Parcelable{
    constructor(parcel: Parcel) : this(
            parcel.readString(),
            parcel.readString(),
            parcel.readString(),
            parcel.readString(),
            parcel.readString(),
            parcel.readLong(),
            parcel.readParcelable(ValuationInfo::class.java.classLoader)) {
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(drivenDistance)
        parcel.writeString(value)
        parcel.writeString(registerLicenseDate)
        parcel.writeString(registerLicenseCity)
        parcel.writeString(registerLicenseCityId)
        parcel.writeLong(lastValuationDate)
        parcel.writeParcelable(info, flags)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<Valuation> {
        override fun createFromParcel(parcel: Parcel): Valuation {
            return Valuation(parcel)
        }

        override fun newArray(size: Int): Array<Valuation?> {
            return arrayOfNulls(size)
        }
    }


}

data class ValuationInfo(@SerializedName("c2BPrices") val c2b:ValuationPrice?=null,
                         @SerializedName("c2CPrices") val c2c:ValuationPrice?=null):Parcelable{
    constructor(parcel: Parcel) : this(
            parcel.readParcelable(ValuationPrice::class.java.classLoader),
            parcel.readParcelable(ValuationPrice::class.java.classLoader)) {
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeParcelable(c2b, flags)
        parcel.writeParcelable(c2c, flags)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<ValuationInfo> {
        override fun createFromParcel(parcel: Parcel): ValuationInfo {
            return ValuationInfo(parcel)
        }

        override fun newArray(size: Int): Array<ValuationInfo?> {
            return arrayOfNulls(size)
        }
    }

}

data class ValuationPrice(@SerializedName("a") val excellent:Quote?=null,
                          @SerializedName("b") val good:Quote?=null,
                          @SerializedName("c") val normal:Quote?=null):Parcelable{
    constructor(parcel: Parcel) : this(
            parcel.readParcelable(Quote::class.java.classLoader),
            parcel.readParcelable(Quote::class.java.classLoader),
            parcel.readParcelable(Quote::class.java.classLoader)) {
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeParcelable(excellent, flags)
        parcel.writeParcelable(good, flags)
        parcel.writeParcelable(normal, flags)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<ValuationPrice> {
        override fun createFromParcel(parcel: Parcel): ValuationPrice {
            return ValuationPrice(parcel)
        }

        override fun newArray(size: Int): Array<ValuationPrice?> {
            return arrayOfNulls(size)
        }
    }

}

data class Quote(@SerializedName("low") val low:String?=null,
                 @SerializedName("mid") val mid:String?=null,
                 @SerializedName("up") val up:String?=null):Parcelable{
    constructor(parcel: Parcel) : this(
            parcel.readString(),
            parcel.readString(),
            parcel.readString()) {
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(low)
        parcel.writeString(mid)
        parcel.writeString(up)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<Quote> {
        override fun createFromParcel(parcel: Parcel): Quote {
            return Quote(parcel)
        }

        override fun newArray(size: Int): Array<Quote?> {
            return arrayOfNulls(size)
        }
    }

}

/**
 * 驾驶证
 */
data class DriverLicense(@SerializedName("totalScore") val score:String?=null):Parcelable{
    constructor(parcel: Parcel) : this(parcel.readString()) {
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(score)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<DriverLicense> {
        override fun createFromParcel(parcel: Parcel): DriverLicense {
            return DriverLicense(parcel)
        }

        override fun newArray(size: Int): Array<DriverLicense?> {
            return arrayOfNulls(size)
        }
    }

}


object CarStatus{

    const val NORMAL = 1 //正常
    const val PROMPT = 2 //可办
    const val OVERDUE = 3 //逾期


    /**
     * 没有年检信息
     */
    const val NJ_NONE = 0
    /**
     * 年检正常 年检有效期前超过8个月 无需办理
     */
    const val NJ_NORMAL = 1

    /**
     * 可预约  有效期前3~8个月 即年检可以办理最早日期前1~6个月
     */
    const val NJ_CAN_RESERVATION = 4

    /**
     * 可办理 有效期前2个月
     */
    const val NJ_CAN_APPLY = 8

    /**
     * 已过期  已经超过年检有效期
     */
    const val NJ_OVERDUE = 16

}